
//any
//有观点认为，使用ts来编码就不要使用any类型
//也有人认为，ts有了any类型，才能保持代码的灵活性，但存在类型安全隐患
//个人观点是：尽量少用
let every: any;
every = "simon";
every = true;
every = 123.456;
every = {};
if (typeof every === "function") {
    every(); //当every不是一个函数时，调用就会报错，所以我们做个类型保护判断
}

let every2: any[] = [123, 3.1415, "simon"]; //感觉就是元组
//every.ifIsExists(); //any类型，在调用方法时，如果方法名不存在时，则不调用
if (typeof every === "number") {
    every.toFixed(); //any类型，在调用方法时，如果方法名存在，则调用
    console.log(every);
}

every = "simon";
if (typeof every === 'string') {
    console.log(every.toUpperCase());
}

//unknown
//unknown相比于any，unknown是一个明确的类型，比any安全
//在使用过程中，使用any还是unknown？
//没有明确的标准，个人认为尽量少用，仅仅是帮助我们偷懒而已，别无用处
//阿康说实际应用中，any用得比unknown更多一点
let noknown: unknown = 666;
noknown = "simon";
noknown = true;
noknown = 123.456;
noknown = {};
noknown = "I don't known";
if (typeof noknown === 'string') {
    console.log(noknown.toUpperCase());
}

//null undefined never 这三种空类型，都是其他类型的子类型
console.log("null is " + (typeof null)); //返回object
